package com.example.springmvcadv.config;

import com.example.springmvcadv.ex.MyException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;

//控制器增强
@ControllerAdvice
public class ExceptionAdvice {

    /**
     * try{某个controller.xxx请求映射方法()}catch(Exception e){...}
     * 本方法的方法参数，一般可以是捕获的异常对象，HttpServletRequest和HttpServletResponse
     * @return
     */
    @ExceptionHandler(MyException.class)
    @ResponseBody
    public Object handle(Exception e){//对应catch的代码块
        //这里要返回的内容，可以和controller请求映射方法返回类似：网页和json
        Map<String, Object> map = new HashMap<>();
        map.put("code", 500);
        map.put("message", "MyExcetpion异常："+e.getMessage());

        return map;//状态码=200，响应体{code: 500}
    }

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Object handle2(Exception e){//对应catch的代码块
        //这里要返回的内容，可以和controller请求映射方法返回类似：网页和json
        Map<String, Object> map = new HashMap<>();
        map.put("code", 500);
        map.put("message", "Exception出现的异常："+e.getMessage());

        return map;//状态码=200，响应体{code: 500}
    }
}
